import tkinter as tk
from tkinter import filedialog, messagebox, ttk
from typing import Optional

def show_custom_message(title: str, message: str):
    """显示自定义大小的消息框"""
    dialog = tk.Toplevel()
    dialog.title(title)
    dialog.geometry("300x200")  # 设置对话框大小
    
    # 使对话框居中
    dialog.update_idletasks()
    width = dialog.winfo_width()
    height = dialog.winfo_height()
    x = (dialog.winfo_screenwidth() // 2) - (width // 2)
    y = (dialog.winfo_screenheight() // 2) - (height // 2)
    dialog.geometry(f'{width}x{height}+{x}+{y}')
    
    # 创建一个框架来容纳消息和按钮
    frame = ttk.Frame(dialog)
    frame.pack(expand=True, fill='both', padx=20, pady=20)
    
    # 添加消息文本，使用anchor='center'使文本居中
    msg_label = ttk.Label(frame, text=message, wraplength=350, anchor='center')
    msg_label.pack(expand=True, fill='both', pady=(0, 20))
    
    # 添加确定按钮
    ok_button = ttk.Button(frame, text="确定", command=dialog.destroy)
    ok_button.pack()
    
    # 设置模态
    dialog.transient(dialog.master)
    dialog.grab_set()
    dialog.wait_window()

def show_file_dialog(title: str = "选择文件", message: str = "请选择一个文件") -> Optional[str]:
    """
    显示一个文件选择对话框
    
    Args:
        title: 对话框标题
        message: 提示消息
        
    Returns:
        str: 选择的文件路径，如果取消则返回 None
    """
    # 创建主窗口
    root = tk.Tk()
    root.withdraw()  # 隐藏主窗口
  
    # 显示自定义大小的提示消息
    show_custom_message(title, message)
    
    # 设置文件选择对话框的大小
    root.geometry("800x600")
    
    # 打开文件选择对话框
    file_path = filedialog.askopenfilename(
        title=title,
        initialdir="/",  # 从根目录开始
        filetypes=[("所有文件", "*.*")]  # 显示所有文件类型
    )
    
    # 如果用户选择了文件，返回文件路径；否则返回 None
    return file_path if file_path else None

# 使用示例
if __name__ == "__main__":
    result = show_file_dialog("测试", "请选择一个文件进行求交")
    if result:
        print(f"选择的文件路径: {result}")
    else:
        print("用户取消了选择") 